package com.enation.app.javashop.core.trade.cart.util;

import com.enation.app.javashop.core.base.CachePrefix;
import com.enation.app.javashop.core.member.model.dos.MemberCoupon;
import com.enation.app.javashop.core.trade.cart.model.enums.CartSourceType;
import com.enation.app.javashop.core.trade.cart.model.enums.CheckedWay;
import com.enation.app.javashop.core.trade.cart.model.vo.CartSkuVO;
import com.enation.app.javashop.core.trade.cart.model.vo.CartVO;
import com.enation.app.javashop.core.trade.cart.model.vo.CouponVO;
import com.enation.app.javashop.framework.context.UserContext;
import com.enation.app.javashop.framework.security.model.Buyer;
import org.springframework.util.CollectionUtils;

import java.util.List;

/**
 * 购物车快捷操作工具
 *
 * @author Chopper
 * @version v1.0
 * @since v7.0
 * 2018-12-01 下午7:53
 */
public class CartUtil {


    /**
     * 根据属主id 从一个集合中查找cart
     * @param ownerId 属主id
     * @param itemList 购物车列表
     * @return 购物车
     */
    public static CartVO findCart(int ownerId, List<CartVO> itemList) {
        if (itemList == null){
            return null;
        }
        for (CartVO item : itemList) {
            if (item.getSellerId() ==  ownerId) {
                return item;
            }
        }
        return null;
    }

    /**
     * 根据提货时间 从一个集合中查找cart
     * @param pickTime 属主id
     * @param itemList 购物车列表
     * @return 购物车
     */
    public static CartVO findCart(Long pickTime, List<CartVO> itemList) {
        if (CollectionUtils.isEmpty(itemList)){
            return null;
        }
        for (CartVO item : itemList) {
            if (item.getPickTime().equals(pickTime)) {
                return item;
            }
        }
        return null;
    }


    /**
     * 设置购物车优惠券的参数
     *
     * @return
     */
    public static CouponVO setCouponParam(MemberCoupon memberCoupon, int sellerId) {
        CouponVO coupon = new CouponVO();
        coupon.setAmount(memberCoupon.getCouponPrice());
        coupon.setMemberCouponId(memberCoupon.getMcId());
        coupon.setEndTime(memberCoupon.getEndTime());
        coupon.setSellerId(sellerId);
        coupon.setCouponThresholdPrice(memberCoupon.getCouponThresholdPrice());
        coupon.setUseTerm("满" + memberCoupon.getCouponThresholdPrice() + "元可用");
        return coupon;
    }


    /**
     * 由一个产品列表中找到产品
     * @param skuId 产品id
     * @param productList 产品列表
     * @return 找到的产品
     */
    public static CartSkuVO findProduct(Integer skuId, List<CartSkuVO> productList) {
        for (CartSkuVO skuVO : productList) {
            if (skuVO.getSkuId().equals(skuId)) {
                return skuVO;
            }
        }
        return null;
    }



    /**
     * 查找选中的优惠券
     * @param cartCouponList
     * @return 如果为空则无选中的优惠劵
     */
    public static  CouponVO findUsedCounpon(List<CouponVO> cartCouponList ){
        if (cartCouponList == null) {
            return  null;
        }
        for (CouponVO couponVO : cartCouponList) {
            if( couponVO.getSelected() ==1){
                return couponVO;
            }
        }

        return null;

    }


    /**
     * 解析购物车缓存key
     * @param cartSourceType
     * @return key
     */
    public static  String  getCartKey(CheckedWay checkedWay, CartSourceType cartSourceType){
        String cacheKey = "";
        //如果会员登录了，则要以会员id为key
        Buyer buyer = UserContext.getBuyer();

        switch (cartSourceType) {
            case SHETUAN_CART:
                if (buyer != null) {
                    cacheKey = (checkedWay.equals(CheckedWay.CART) ? CachePrefix.CART_SHETUAN_DATA_PREFIX.getPrefix() : CachePrefix.BUY_NOW_SHETUAN_DATA_PREFIX.getPrefix())
                            + buyer.getUid();
                }
                break;
            case COMMON_CART:
                if (buyer != null) {
                    cacheKey = (checkedWay.equals(CheckedWay.CART) ? CachePrefix.CART_ORIGIN_DATA_PREFIX.getPrefix() : CachePrefix.BUY_NOW_ORIGIN_DATA_PREFIX.getPrefix())
                            + buyer.getUid();
                }
                break;
            case TONGCHENG_CART:
                // TODO
                break;
            default:

        }
        return cacheKey;
    }
}
